# coding=utf-8

# 基本函数定义。
def func():
	print("func")

func()

# 带返回值的函数。
def func_with_return():
	return ("func_with_return")

print(func_with_return())

# 带多个返回值的函数。
def func_with_muti_return():
	return ("func_with_muti_return", "func_with_muti_return")

print(func_with_muti_return())

# 位置参数
def func_with_parameters(x, y):
	print(x, y)

func_with_parameters(1, 2)

# 收集多余的位置参数
def func_with_collection_rest_parameters(x, y, *rest):
	print(x, y)
	print(rest)

func_with_collection_rest_parameters(1, 2, 3, 4, 5)

# 命名参数
def func_with_named_parameters(x, y, z):
	print(x, y, z)

func_with_named_parameters(z = 1, y = 2, x = 3)

# 默认值参数
def func_with_default_value_parameters(x, y, z = 3):
	print(x, y, z)

func_with_default_value_parameters(y = 2, x = 1)

# 收集命名参数
def func_with_collection_rest_naned_parameters(*args, **named_agrs):
	print(args)
	print(named_agrs)

func_with_collection_rest_naned_parameters(1, 2, 3, x = 4, y = 5, z = 6)

# 集合扁平化
func_with_collection_rest_naned_parameters([1, 2, 3], {"x": 4, "y": 4, "z": 6}) #这会导致args[0]指向第一个实参，args[1]指向第二个实参。
func_with_collection_rest_naned_parameters(*[1, 2, 3], **{"x": 4, "y": 4, "z": 6}) #这里的执行相当于func_with_collection_rest_naned_parameters(1, 2, 3, x = 4, y = 5, z = 6)。